﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _27_Interpreter
{
    abstract class AbstractExpresion
    {
        public abstract void Interprect(Context context);
    }

    /*
     * 实现与文法的终结符相关联的解释操作。
     * 文法中的每一个终结符都有一个具体终结表达式与之对应
     */
    class TerminalExpression : AbstractExpresion
    {
        public override void Interprect(Context context)
        {
            Console.WriteLine("终端解释器");
        }
    }

    /*
     为文法中的非终端符实现解释操作。对文法中的每一个规则R1/Rn都需要一个具体的非终端表达式类。
     以递归方式调用各个实例变量
         */
    class NonterminalExpresion : AbstractExpresion
    {
        public override void Interprect(Context context)
        {
            Console.WriteLine("非终端解释器");
        }
    }

    class Context
    {
        private string input;
        public string Input
        {
            get { return input; }
            set { input = value; }
        }

        private string output;
        public string Output
        {
            get { return output; }
            set { output = value; }
        }
    }
}
